#include <iostream>
using namespace std;

typedef long long ll;

const int N = 2010;
const int mod = 1e9 + 7;

int n, a, b; //获取输入
ll C[N][N];  //这里用ll并不是因为数组里面的数会爆int，而是因为二者运算可能会爆int

void init() //初始化C
{
    for (int i = 0; i <= 2000; ++i)
        for (int j = 0; j <= i; ++j) //穷举所有可能的组合要求
            if (!j)                  //如果要取出的数位0个
                C[i][j] = 1;         //那么结果一定是0
            else
                C[i][j] = (C[i - 1][j - 1] + C[i - 1][j]) % mod; //否则就使用递推公式，递推顺序的合理性可由数学归纳法证明
                                                                 //至于模mod以后不会影响后续运算的原因，是数学知识模加运算的属性
    return;
}

int main()
{
    init();
    // freopen("cin.txt", "r", stdin);
    cin >> n;
    for (int i = 0; i < n; ++i)
    {
        cin >> a >> b;
        cout << C[a][b] << endl;
    }
    return 0;
}